/******************************************************************************
 * @file       messageimgdialog.cpp
 * @brief      带图片的提示框
 *****************************************************************************/
#include "messageimgdialog.h"

#include <QQmlContext>
#include <QJsonValue>

#include "tools.h"

// 静态成员初始化
MessageImgDialog *MessageImgDialog::_msgImgDialog = NULL;

/**
 * @brief 构造函数
 */
MessageImgDialog::MessageImgDialog()
{
    this->setWindowTitle(this->_title);
    // this->setWindowFlags(Qt::Dialog);
    // // 去掉问号，只保留关闭
    // this->setWindowFlags(Qt::CustomizeWindowHint | Qt::WindowCloseButtonHint);
    this->setWindowModality(Qt::ApplicationModal); // 模态
    this->setFixedSize(511, 399);

    // 暴露自身对象
    this->getContext()->setContextProperty("msgImgBox", this);

    // 加载qml
    this->setResizeMode(QQuickWidget::SizeRootObjectToView);
    this->setSource(QUrl("qrc:/custommessageimgdialog.qml"));

    // 函数链接
    // 标题变化
    connect(this, &MessageImgDialog::titleChanged, this, &MessageImgDialog::onTitleChanged);
}

/**
 * @brief 析构函数
 */
MessageImgDialog::~MessageImgDialog()
{
    _msgImgDialog = NULL;
}

/**
 * @brief 设置窗口
 * @param *parent 父窗口
 * @param title 窗口标题
 * @param text 提示信息
 * @param standardButton 默认按钮（默认有个确定按钮）
 */
void MessageImgDialog::messageBox(QWidget *parent, QString title, QString text, int standardButton)
{
    // 初始化
    if(!_msgImgDialog)
    {
        _msgImgDialog = new MessageImgDialog();
    }

    // 设置窗口信息
    QJsonObject msgBox;
    msgBox.insert("title", QJsonValue(title));
    msgBox.insert("text", QJsonValue(text));
    msgBox.insert("standardButton", QJsonValue(standardButton));
    _msgImgDialog->setBoxMessage(json2jsonStr(msgBox));
    emit _msgImgDialog->titleChanged(title); // 窗口标题变化信号
    _msgImgDialog->setParent(parent, Qt::Window | Qt::WindowCloseButtonHint);
    _msgImgDialog->show();
}

/**
 * @brief getContext 获取qmlcontext
 * @return qmlContext
 */
QQmlContext* MessageImgDialog::getContext() const
{
    return this->rootContext();
}

/**
 * @brief getRootObject 获取rootObject
 * @return rootObject
 */
QObject* MessageImgDialog::getRootObject() const
{
    qDebug() << "this->rootObject()" << this->rootObject();
    return (QObject*)this->rootObject();
}

/**
 * @brief 获取提示信息
 * @return 提示信息
 */
QString MessageImgDialog::getBoxMessage() const
{
    return _boxMessage;
}

/**
 * @brief 设置提示信息
 * @param text 提示信息
 */
void MessageImgDialog::setBoxMessage(QString msg)
{
    if(_boxMessage != msg)
    {
        _boxMessage = msg;
        emit MessageImgDialog::boxMessageChanged(msg); // 发送提示信息变化信号
    }
}

/**
 * @brief 窗口信息变化槽函数
 */
void MessageImgDialog::onBoxMessageChanged()
{
    // 重新设置窗口信息属性
    qDebug() << "信息变化" << _boxMessage;
}

/**
 * @brief 窗口标题变化槽函数
 * @param title 窗口标题
 */
void MessageImgDialog::onTitleChanged(QString title)
{
    _title = title;
    this->setWindowTitle(_title);
}
